Racket 二叉树
定义二叉树节点
定义一个名为 tree-node 的结构体,包含 val、left 和 right 三个字段。
; val 是整数类型,left 和 right 可以是 tree-node 或者 #f。
(struct tree-node (val left right) #:mutable #:transparent)
构造二叉树节点
; 创建一个新的二叉树节点,默认值为 0。
; 返回一个新的 tree-node 结构体实例。
(define (make-tree-node [val 0])
(tree-node val #f #f))
访问二叉树节点的值
; 获取节点的值
(tree-node-val node)
; 获取节点的左子树
(tree-node-left node)
; 获取节点的右子树
(tree-node-right node)
修改二叉树节点的值
; 设置节点的值
(set-tree-node-val! node new-val)
; 设置节点的左子树
(set-tree-node-left! node new-left)
; 设置节点的右子树
(set-tree-node-right! node new-right)
判断子树是否为空
在 Racket 中,对于您之前提供的 tree-node
结构体定义,左子树和右子树为空时,它们的值为 #f
。因此,您可以使用 Racket 的内置函数 false?
来判断它们是否为空。
判断左子树是否为空:
(if (false? (tree-node-left node))
(displayln "左子树为空")
(displayln "左子树不为空"))
判断右子树是否为空:
(if (false? (tree-node-right node))
(displayln "右子树为空")
(displayln "右子树不为空"))
本文作者:Maeiee
本文链接:Racket 二叉树
版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!
喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!